//检查两个字符串数组是否相等
/*给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同，返回 true ；否则，返回 false 。
数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。
1 <= word1.length, word2.length <= 103
1 <= word1[i].length, word2[i].length <= 103
1 <= sum(word1[i].length), sum(word2[i].length) <= 103
word1[i] 和 word2[i] 由小写字母组成*/
class Solution {
public:
    bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) {
        string tump1;
        for (auto i : word1) {
            tump1 += i;
        }
        string tump2;
        for (auto i : word2) {
            tump2 += i;
        }
        return tump1 == tump2;
    }
};



//计算 K 置位下标对应元素的和
/*给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。

请你用整数形式返回 nums 中的特定元素之 和 ，这些特定元素满足：其对应下标的二进制表示中恰存在 k 个置位。

整数的二进制表示中的 1 就是这个整数的 置位 。

例如，21 的二进制表示为 10101 ，其中有 3 个置位。
1 <= nums.length <= 1000
1 <= nums[i] <= 105
0 <= k <= 10
*/
class Solution {
public:
    bool is_same_k(int num, int k) {
        int count = 0;
        while (num) {
            num &= num - 1;
            count++;
        }
        if (count == k)
            return true;
        else
            return false;
    }
    int sumIndicesWithKSetBits(vector<int>& nums, int k) {
        int sum = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (is_same_k(i, k))
                sum += nums[i];
        }
        return sum;
    }
};


//反转之后不同整数的数目
/*给你一个由 正 整数组成的数组 nums 。
你必须取出数组中的每个整数，反转其中每个数位，并将反转后得到的数字添加到数组的末尾。这一操作只针对 nums 中原有的整数执行。
返回结果数组中 不同 整数的数目。
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^6
*/
class Solution {
public:
    int reverse_num(int num) {
        int new_num = 0;
        while (num) {
            new_num *= 10;
            new_num += num % 10;
            num /= 10;
        }
        return new_num;
    }
    int countDistinctIntegers(vector<int>& nums) {
        int hash[1000001] = {0};
        int count = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (hash[nums[i]] == 0) {
                count++;
                hash[nums[i]]++;
            }
            int new_num = reverse_num(nums[i]);
            if (hash[new_num] == 0) {
                count++;
                hash[new_num]++;
            }
        }
        return count;
    }
};